#ifndef TASKEDITDIALOG_H
#define TASKEDITDIALOG_H

#include "FramelessWindow.h"
#include <QLineEdit>
#include <QTextEdit>
#include <QDateTimeEdit>
#include <QCheckBox>
#include <QPushButton>
#include <QEventLoop>
#include <QComboBox>
#include <QLabel>
#include "plan/PlanTask.h"

/**
 * @brief 任务编辑对话框
 * 用于创建新任务或编辑现有任务
 * 继承自 FramelessWindow 以保持与主窗口样式一致
 * [FDD-2025-11] 扩展支持状态、DoD、范围、阻塞、产出等字段
 */
class TaskEditDialog : public FramelessWindow
{
    Q_OBJECT

public:
    explicit TaskEditDialog(QWidget *parent = nullptr);
    explicit TaskEditDialog(const PlanTask& task, QWidget *parent = nullptr);
    ~TaskEditDialog();

    /**
     * @brief 获取编辑后的任务
     */
    PlanTask getTask() const;

    /**
     * @brief 模拟 QDialog 的 exec() 方法
     */
    int exec();

signals:
    void accepted();
    void rejected();

private:
    void setupUi();
    void loadTask(const PlanTask& task);
    bool validateInput();

private slots:
    void onSave();
    void onCancel();
    void onReminderToggled(bool enabled);
    void onPickStartTime();
    void onPickEndTime();
    void onCopyDodTemplate();  // [FDD-2025-11] DoD 模板按钮
    void onStatusChanged(int index);  // [FDD-2025-11] 状态改变处理

private:
    // 任务数据
    PlanTask m_task;
    bool m_isNewTask;

    // 基础 UI 组件
    QLineEdit* m_titleEdit;              // 标题输入框
    QComboBox* m_statusCombo;            // [FDD-2025-11] 状态选择
    QTextEdit* m_descEdit;               // 描述输入框（改为范围/描述）
    QDateTimeEdit* m_startTimeEdit;      // 开始时间选择器
    QDateTimeEdit* m_endTimeEdit;        // 结束时间选择器
    QCheckBox* m_reminderCheckBox;       // 提醒复选框
    QDateTimeEdit* m_reminderTimeEdit;   // 提醒时间选择器

    // [FDD-2025-11] 新增字段
    QTextEdit* m_dodEdit;                // DoD（完成定义）
    QLabel* m_dodCharCountLabel;         // DoD 字数统计
    QTextEdit* m_blockersEdit;           // 阻塞点
    QTextEdit* m_artifactsSummaryEdit;   // 产出概述
    QTextEdit* m_artifactsLinksEdit;     // 产出链接
    QPushButton* m_dodTemplateBtn;       // DoD 模板按钮

    QPushButton* m_saveBtn;              // 保存按钮
    QPushButton* m_cancelBtn;            // 取消按钮

    // 对话框状态
    int m_result = 0;                    // 0=Rejected, 1=Accepted
    bool m_eventLoopStarted = false;     // 事件循环是否已启动
};

#endif // TASKEDITDIALOG_H





